<?php
namespace Common\Controller;
use Think\Controller;

/**
 * 整个项目控制器基类
 *
 * 所有的控制器都继承该类
 * 在该类中主要初始化一些配置数据
 *
 * @author: xuhui <xuh86@126.com>
 * @version: $Id$
 * @package: asoc.Common.Controller
 *
 */

class BaseController extends Controller {

	
	protected $_RPath;		//系统根目录
	protected $_Cfg;		//配置数组
	protected $_FESrcPath;	//前台资源路径
	protected $_BESrcPath;	//后台资源路径
	
	function _initialize() {

		header("Content-Type:text/html; charset=utf-8");
		date_default_timezone_set('PRC');


		//初始化所有配置项
		$_Cfg		=	M('SysWebconf')->find(1);
		$this->_Cfg	=	$_Cfg;
		$this->assign('_Cfg',$_Cfg);

		//系统根目录
		$this->_RPath	=	$this->getRootPath();
		$this->assign('_RPath',$this->_RPath);
		
		//前台、后台资源路径
		$this->_BESrcPath =	$this->_RPath . 'theme/Admin/Public/';
		$this->assign('_BESrcPath',$this->_BESrcPath);
		
		//当前项目、控制器、操作
		$this->assign('module',MODULE_NAME);
		$this->assign('controller',CONTROLLER_NAME);
		$this->assign('action',ACTION_NAME);

        //css版本
        $this->assign('srcVer',time().rand(1000,9999));
	}
	
	/**
	 * @param string $path: 上传路径 相对于根目录下upload
	 * @param int $maxSize: 允许上传大小 单位千字节(kb) 默认2048kb 即2M
	 * @param string $exts: 允许上传的文件类型，逗号分隔
	 * @param string $prefix: 上传图片命名前缀
	 */
	public function uploadFile($path,$maxSize = 2048,$exts='',$prefix=''){
		
		$upload = new \Think\Upload();// 实例化上传类   
		
		$upload->maxSize   =    $maxSize * 1024 ;		// 设置附件上传大小   单位为字节b
		
		$extArray		   =	$exts != '' ? explode(',',$exts) : array('jpg', 'gif', 'png', 'jpeg');
		$upload->exts      =	$extArray;	// 设置附件上传类型    
		$upload->savePath  =    $path; 		// 设置附件上传目录    
		$upload->autoSub   =	false;		// 自动使用子目录保存
		$upload->saveName  =	array('getUploadName',array($prefix,6));	//图片命名规则
					
		// 上传文件    
		$info   =   $upload->upload();    
		if(!$info) {
			$status		=	0;
			// 上传错误提示错误信息
			$msg		=	$upload->getError();
   
		}else{
			
			$status	=	1;
			$msg	=	$info;		
		}
		
		return array('status'=>$status,'info'=>$msg);
	}


    /**
     * @param $text:生成二维码的文本信息
     * @param $logo:二维码logo 为空则不加
     * @param bool $outfile：是否输出为二维码图片
     * @param int $level：容错率级别
     * @param int $size:生成图片大小 默认为3
     * @param int $margin：二维码周边空白间距
     * @param bool $saveandprint:是否保存二维码并显示
     */
    public function makeQRCode($text,$logo='',$size=4, $margin=4,$level=QR_ECLEVEL_H,$outfile=false,$saveandprint=true)
    {
        vendor("phpqrcode.phpqrcode");

        //存储二维码路径
        $qrPath = './upload/qrcode/';
        $randStr = time().mt_rand(10,99);
        $qr_nologo = 'qrcode_'.$randStr.'.png';
        $qr_logo = 'qrcode_'.$randStr.'_logo.png';
        \QRcode::png($text,$qrPath . $qr_nologo, $level, $size, $margin,$saveandprint);

        $QR = $qrPath . $qr_nologo;

        if($logo != '')
        {
            $QR = imagecreatefromstring(file_get_contents($QR));
            $logo = imagecreatefromstring(file_get_contents($logo));
            $QR_width = imagesx($QR);
            $QR_height = imagesy($QR);
            $logo_width = imagesx($logo);
            $logo_height = imagesy($logo);
            $logo_qr_width = $QR_width / 5;
            $scale = $logo_width / $logo_qr_width;
            $logo_qr_height = $logo_height / $scale;
            $from_width = ($QR_width - $logo_qr_width) / 2;
            imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
            imagepng($QR,$qrPath . $qr_logo);
        }

        $array['qr_code'] = $qr_nologo;
        if($logo != '') $array['qr_code_logo'] = $qr_logo;

        return $array;
    }



    public function getUrlByNode($node=1,$type='article')
    {
        $url = '';
        $config = $this->_Cfg;
        if($type == 'article')  //文章链接
        {
            $url = 'http://'.$config['domain']."/article-{$node}.html";
        }
        if($type == 'category')
        {
            if($node == 1)
            {
                $url = 'http://'.$config['domain']."/";
            }else{
                $url = 'http://'.$config['domain']."/cate-{$node}.html";
            }
        }
        return $url;
    }

	
	/**
	*	取代$_GET获取get整形变量
	*	@param string $var: $_GET变量名称
	*	@param int $default: 当该$_GET变量不存在时返回的默认值
	*	@return int 
	*/
	public function getInt($var,$default=0){

		return isset($_GET[$var]) ? intval($_GET[$var]) : $default;
	
	}
	
	/**
	 *	取代$_GET获取get字符串变量
	 *	@param string $var: $_GET变量名称
	 *	@param string $default: 当该$_GET变量不存在时返回的默认值
	 *	@return string
	 */
	public function getString($val,$default=""){
		
		return isset($_GET[$val]) ? (!get_magic_quotes_gpc() ? addslashes($_GET[$val]): $_GET[$val]) : $default;
	}
	

			
	
	/** 
	*	函数名称：inject_check() 
	*	函数作用：检测提交的值是不是含有SQL注射的字符，防止注射，保护服务器安全 
	*	@param mixed $sql_str: 提交的变量 
	*	@return boolean 返回检测结果 ture or false 
	*/ 
	public function inject_check($sql_str) {  
		
		return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);    // 进行过滤  
	
	}  
	
	/**
	 * 根据提供的url和提示消息进行提示和跳转
	 * @param string $jumpURL
	 * @param string $msg
	 */
	public function redirectTo($jumpURL='',$msg=''){
		
		if($jumpURL == ""){
			
			$jumpHtmls	=	'<script>';
			$jumpHtmls	=	$msg != "" ? $jumpHtmls . 'alert("'.$msg.'");': $jumpHtmls;
			$jumpHtmls .=	' window.history.back();</script>';	
			
		}else{
			
			if(strstr($jumpURL,'http://')){
				
				$jumpHtmls	=	'<script>';
				$jumpHtmls  =	$msg != "" ? $jumpHtmls . 'alert("'.$msg.'");': $jumpHtmls;
				$jumpHtmls .=	' window.location="'.$jumpURL.'";</script>';
				
				echo $jumpHtmls;exit;
				
			}else{
				if($msg == ''){
					$this->redirect($jumpURL,"",0);
				}else{
					//$this->redirect($jumpURL,"",0,"<script>alert('".$msg."');</script>");
					echo '<script>alert("'.$msg.'");location="'.U($jumpURL).'"</script>';exit;
				}
			}
		}
		
		
	}
	
	
	/**
	*	模拟弹出一个Alert框
	*	@param string $str  弹出消息内容
	*	@param string $urlTo	跳转到的页面URL
	*	@param int $level	警告级别	0 成功 1 信息提示 2 警告 3 错误
	*	@return string 跳转的html
	*/
    public function myAlert($str, $urlTo = "", $level = 3) {
       
	    $levelStr = 'error';  //默认为错误提示
        if ($level == 0)
            $levelStr = 'success';
        if ($level == 1)
            $levelStr = 'info';
        if ($level == 2)
            $levelStr = 'warning';


        $HTML = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
						<html xmlns="http://www.w3.org/1999/xhtml">
						<head>
						<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
						<meta http-equiv="refresh"content="3;url=' . $urlTo . '">
						<title></title>
						<script src="' . $this->_RPath . 'Public/js/jquery-1.7.2.min.js" type="text/javascript"></script>
						<script src="' . $this->_RPath . 'Public/js/jqueryAlert/js/jquery.alerts-min.js" type="text/javascript"></script>
						<script src="' . $this->_RPath . 'Public/js/jqueryAlert/js/jquery.ui.draggable.js" type="text/javascript"></script>
						<link href="' . $this->_RPath . 'Public/js/jqueryAlert/css/jquery.alerts.css" rel="stylesheet" type="text/css"/>
						</head>
						<body>
							<script type="text/javascript">
							
								function a(){location.href="' . $urlTo . '";}
								jAlert("' . $levelStr . '", "' . $str . '", "来自搜配网的消息",a);	
							</script>
						</body>
						</html>';
        return $HTML;
    }
    
    
    /**
     *	获取当前站点的根目录（绝对路径）
     *	@return string 	系统根路径 比如 "/"或"/www/"等
     */
	public function getRootPath(){

		//网站根目录路径
		$docRoot	=	str_replace('\\','/',dirname($_SERVER['SCRIPT_NAME']));
		
		$docRoot	=	(empty($docRoot) || $docRoot == '/' ) ? '/' : '/'.trim($docRoot,'/').'/';

		return $docRoot;
	}

	
	public function ajaxBack($info,$status=0){
		if(is_array($info)){
			echo json_encode($info);exit;
		}
		if(is_string($info)||is_numeric($info)){
			echo json_encode(array('status'=>$status,'msg'=>$info));exit;
		}
	}
}